package com.wonders.framework.util.dao;

import java.util.Collection;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.type.Type;

import com.wonders.framework.entity.vo.Parameter;

/**
 * 参数工具
 * 
 * @author WuBin
 * 
 */
public class ParamsUtil {

	/**
	 * 设置查询参数
	 * 
	 * @param query
	 *            查询实例
	 * @param args
	 *            参数列表
	 */
	public static void setQueryParameters(Query query, List<Parameter> args) {
		if (args != null)
			for (int i = 0; i < args.size(); i++) {
				Parameter arg = (Parameter) args.get(i);
				String argName = arg.getName();
				Object argValue = arg.getValue();
				Type argType = arg.getType();
				if (argName == null) {
					if (argType == null) {
						query.setParameter(i, argValue);
					} else {
						query.setParameter(i, argValue, argType);
					}

				} else if (argType == null) {
					if (Collection.class.isInstance(argValue)) {
						query.setParameterList(argName, (Collection) argValue);
					} else {
						query.setParameter(argName, argValue);
					}

				} else if (Collection.class.isInstance(argValue)) {
					query.setParameterList(argName, (Collection) argValue,
							argType);
				} else
					query.setParameter(argName, argValue, argType);
			}
	}

}
